package com.aspose.pdf.examples.AsposePdfExamples.DocumentObject;

import com.aspose.pdf.Document;
import com.aspose.pdf.FontStyles;
import com.aspose.pdf.Heading;
import com.aspose.pdf.Page;
import com.aspose.pdf.TextFragment;
import com.aspose.pdf.TextSegment;
import com.aspose.pdf.TocInfo;

public class AddTOCToExistingPDF {

	public static void main(String[] args) {
		// Load an existing PDF files
		Document doc = new Document("source.pdf");
		// Get access to first page of PDF file
		Page tocPage = doc.getPages().insert(1);
		// Create object to represent TOC information
		TocInfo tocInfo = new TocInfo();
		TextFragment title = new TextFragment("Table Of Contents");
		title.getTextState().setFontSize(20);
		title.getTextState().setFontStyle(FontStyles.Bold);
		// Set the title for TOC
		tocInfo.setTitle(title);
		tocPage.setTocInfo(tocInfo);
		// Create string objects which will be used as TOC elements
		String[] titles = new String[4];
		titles[0] = "First page";
		titles[1] = "Second page";
		titles[2] = "Third page";
		titles[3] = "Fourth page";
		for (int i = 0; i < 4; i++) {
			// Create Heading object
			Heading heading2 = new Heading(1);
			TextSegment segment2 = new TextSegment();
			heading2.setTocPage(tocPage);
			heading2.getSegments().add(segment2);
			// Specify the destination page for heading object
			heading2.setDestinationPage(doc.getPages().get_Item(i + 2));
			// Destination page
			heading2.setTop(doc.getPages().get_Item(i + 2).getRect().getHeight());
			// Destination coordinate
			segment2.setText(titles[i]);
			// Add heading to page containing TOC
			tocPage.getParagraphs().add(heading2);
		}
		// Save the updated document
		doc.save("TOC_Output_Java.pdf");
	}
}
